package com.ninetaildemonfox.zdl.socialproject.config;

import com.google.gson.JsonObject;

import java.io.File;
import java.util.List;

import okhttp3.MultipartBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Url;

/**
 * 创建人： Nine tails fox
 * 创建时间： 2019/7/30
 * 功能描述： Rectrofit接口
 * 联系方式：1037438704@qq.com
 *
 * @author NineTailDemonFox
 */

public interface RetrofitInterface {


    /**
     * 登录接口
     */
    @POST()
    @FormUrlEncoded
    Call<JsonObject> getLogin(@Url String url,
                              @Field("account") String account,
                              @Field("password") String psd);

    /**
     * 注册接口
     */
    @POST()
    @FormUrlEncoded
    Call<JsonObject> getRegisterBean(@Url String url,
                                     @Field("account") String account,
                                     @Field("verify") String verify,
                                     @Field("password") String pad);

    /**
     * 发送短信
     * login(登录)，register（注册）,retrieve（找回密码）,
     * mod_pass(修改密码)，mod_bind（修改绑定手机）
     * ，re_bind(绑定手机)
     */
    @POST()
    @FormUrlEncoded
    Call<JsonObject> getSendVerify(@Url String url,
                                   @Field("account") String account,
                                   @Field("send_type") String send_type
            , @Field("token") String token
    );

    /**
     * 三方登录
     * type( 1QQ登录 2微信登录 )
     */
    @POST("Member/threeLogin")
    @FormUrlEncoded
    Call<JsonObject> getThreeLogin(
            @Field("openid") String openid,
            @Field("nickname") String nickname,
            @Field("type") String type,
            @Field("type_login") String type_login
    );

    /**
     * 三方登录
     * type( 1QQ登录 2微信登录 )
     */
    @POST()
    @FormUrlEncoded
    Call<JsonObject> getEditSex(@Url String url,
                                @Field("token") String token,
                                @Field("sex") String sex);

    /**
     * 三方登录
     * type( 1QQ登录 2微信登录 )
     */
    @GET("SystemSet/agreement")
    Call<JsonObject> getAgreement();


    /**
     * 三方登录
     * token	用户 token	否	文本	未提供
     * nickname	昵称	否	文本	未提供
     * city	常驻城市 id	否	文本	未提供
     * birthday	生日	否	文本	未提供
     * expect_ids	期望对象 id 逗号间隔	否	文本	未提供
     * qq	qq号 选填	否	文本	未提供
     * wx	微信号 选填	否	文本	未提供
     * height	身高 选填	否	文本	未提供
     * weight	体重 选填	否	文本	未提供
     * description	个人介绍 选填	否	文本	未提供
     * set_hidden_account	对他人隐藏我的社交账号 1否 2是
     */
    @POST("Member/modBaseData")
    @FormUrlEncoded
    Call<JsonObject> getModBaseData(@Field("token") String token,
                                    @Field("nickname") String nickname,
                                    @Field("city") String city,
                                    @Field("birthday") String birthday,
                                    @Field("expect_ids") String expect_ids,
                                    @Field("qq") String qq,
                                    @Field("wx") String wx,
                                    @Field("height") String height,
                                    @Field("weight") String weight,
                                    @Field("description") String description,
                                    @Field("set_hidden_account") String set_hidden_account);

    /**
     * 城市接口
     */
    @GET("Region/regionList")
    Call<JsonObject> getModBaseData();

    /**
     * 城市接口
     */
    @GET("Expect/index")
    Call<JsonObject> getIndex();

    /**
     * 城市接口
     */
    @POST("ProblemWallet/problemList")
    @FormUrlEncoded
    Call<JsonObject> getBlemList(@Field("token") String token,
                                 @Field("page") int page);

    @POST("ProblemWallet/problemInfo")
    @FormUrlEncoded
    Call<JsonObject> getProblemInfo(@Field("token") String token,
                                    @Field("id") String id);

    /**
     * 我的界面个人资料
     */
    @POST("Member/memberBaseData")
    @FormUrlEncoded
    Call<JsonObject> getMyIndex(
            @Field("token") String token);


    /**
     * 恢复焚毁照片
     */
    @POST("ImageMember/replyImage")
    @FormUrlEncoded
    Call<JsonObject> replyImage(
            @Field("token") String token);


    /**
     * 申请邀请码
     */
    @POST("Apply/addApply")
    @FormUrlEncoded
    Call<JsonObject> getAddApply(
            @Field("token") String token,
            @Field("city") String city,
            @Field("where") String where,
            @Field("phone") String phone,
            @Field("parent") String parent);

    /**
     * 申请邀请码
     */
    @POST("VipMeal/mealList")
    @FormUrlEncoded
    Call<JsonObject> getMealList(
            @Field("token") String token);

    /**
     * 填写邀请码
     */
    @POST("Member/bindInviteCode")
    @FormUrlEncoded
    Call<JsonObject> getBindInviteCode(
            @Field("token") String token,
            @Field("invite_code") String invite_code);


    /**
     * 找回密码
     */
    @POST("Member/resetPassword")
    @FormUrlEncoded
    Call<JsonObject> getResetPassword(
            @Field("account") String account,
            @Field("verify") String verify,
            @Field("password") String password,
            @Field("type") String type);


    /**
     * 意见反馈
     */
    @POST("Feedback/addFeedBack")
    @FormUrlEncoded
    Call<JsonObject> getAddFeedBack(
            @Field("token") String token,
            @Field("content") String content,
            @Field("phone") String phone);

    /**
     * 意见反馈
     */
    @POST("Member/bindAlipay")
    @FormUrlEncoded
    Call<JsonObject> getBindAlipay(
            @Field("token") String token,
            @Field("alipay_account") String alipay_account,
            @Field("alipay_name") String alipay_name);

    /**
     * 账户明细
     */
    @POST("MemberBill/billList")
    @FormUrlEncoded
    Call<JsonObject> getBillList(
            @Field("token") String token,
            @Field("type") String type,
            @Field("page") int page);

    /**
     * 我的钱包
     */
    @POST("Member/myWallet")
    @FormUrlEncoded
    Call<JsonObject> getMyWallet(
            @Field("token") String token);

    /**
     * 我的钱包
     */
    @POST("Index/index")
    @FormUrlEncoded
    Call<JsonObject> getIndex(
            @Field("token") String token,
            @Field("sex") String sex,
            @Field("lon") String lon,
            @Field("lat") String lat,
            @Field("page") String page,
            @Field("type") String type,
            @Field("city") String city,
            @Field("nickname") String nickname);

    /**
     * 我的钱包
     */
    @POST("Region/queryIdbyName")
    @FormUrlEncoded
    Call<JsonObject> getQueryIdbyName(
            @Field("region_name") String region_name);

    /**
     * 消息列表   消息类型 1系统消息 2广播消息 3评价消息 4 缴费提醒
     */
    @POST("Msg/msgList")
    @FormUrlEncoded
    Call<JsonObject> getMsgList(
            @Field("token") String token
            , @Field("type") String tyep);

    /**
     * 推送消息设置
     */
    @POST("SetPush/setPush")
    @FormUrlEncoded
    Call<JsonObject> SetPush(
            @Field("token") String token
            , @Field("type") String tyep);

    /**
     * 消息详情
     */
    @POST("Msg/msgInfo")
    @FormUrlEncoded
    Call<JsonObject> getMsgInfo(
            @Field("token") String token
            , @Field("msg_id") String msg_id);


    /**
     * 读取消息
     */
    @POST("Msg/readMsg")
    @FormUrlEncoded
    Call<JsonObject> getReadMsg(
            @Field("token") String token,
            @Field("type") String type
            , @Field("id") String id);

    /**
     * 读取消息
     */
    @POST("Msg/systemNotice")
    @FormUrlEncoded
    Call<JsonObject> getSystemNotice(
            @Field("token") String token);


    /**
     * 推送设置
     */
    @POST("SetPush/setPush")
    @FormUrlEncoded
    Call<JsonObject> setPush1(
            @Field("token") String token
            , @Field("new_yue") String new_yue
            , @Field("type") String type
    );

    /**
     * 推送设置
     */
    @POST("SetPush/setPush")
    @FormUrlEncoded
    Call<JsonObject> setPush2(
            @Field("token") String token
            , @Field("new_yue") String new_yue
    );


    /**
     * 用户详情
     * <p>
     * 参数名称	参数描述	是否为空	参数类型	示例值
     * token	用户 token	否	文本	未提供
     * member_id	被查看用户id	否	文本	未提供
     * lon	经度	否	文本	未提供
     * lat	纬度
     */
    @POST("Index/memberInfo")
    @FormUrlEncoded
    Call<JsonObject> getMemberInfo(
            @Field("token") String token
            , @Field("member_id") String member_id
            , @Field("lon") String lon
            , @Field("lat") String lat
    );

    /**
     * 用户详情
     * <p>
     * 参数名称	参数描述	是否为空	参数类型	示例值
     * token	用户 token	否	文本	未提供
     * member_id	被查看用户id	否	文本	未提供
     * lon	经度	否	文本	未提供
     * lat	纬度
     */
    @POST("Mylike/addMylike")
    @FormUrlEncoded
    Call<JsonObject> addMylike(
            @Field("token") String token
            , @Field("cover_member_id") String cover_member_id
    );

    /**
     * 用户详情
     * <p>
     * 参数名称	参数描述	是否为空	参数类型	示例值
     * token	用户 token	否	文本	未提供
     * member_id	被查看用户id	否	文本	未提供
     * lon	经度	否	文本	未提供
     * lat	纬度
     */
    @POST("Order/orderList")
    @FormUrlEncoded
    Call<JsonObject> getOrderList(
            @Field("token") String token
            , @Field("page") String page
            , @Field("type") String type
            , @Field("city") String city
            , @Field("system_type") String system_type
    );


    /**
     * 用户详情
     * <p>
     * 参数名称	参数描述	是否为空	参数类型	示例值
     * token	用户 token	否	文本	未提供
     * member_id	被查看用户id	否	文本	未提供
     * lon	经度	否	文本	未提供
     * lat	纬度
     */
    @POST("Member/modBaseDataHead")
    @FormUrlEncoded
    Call<JsonObject> getModBaseDataHead(
            @Field("token") String token
            , @Field("head_pic_id") String head_pic_id
            , @Field("nickname") String nickname
            , @Field("birthday") String birthday
            , @Field("type") String type
    );

    /**
     * 邀请好友
     */
    @POST("Member/inviteFriends")
    @FormUrlEncoded
    Call<JsonObject> getInviteFFriends(
            @Field("token") String token
    );

    /**
     * 立即邀请
     */
    @POST("Member/inviteNow")
    @FormUrlEncoded
    Call<JsonObject> getInviteNow(
            @Field("token") String token
    );

    /**
     * 邀请好友活动规则
     */
    @GET("SystemSet/activityRule")
    Call<JsonObject> getActivityRule();

    /**
     * 隐私设置
     * token	用户 token	否	文本	未提供
     * set_info	个人详情设置1公开 2相册解锁查看	否	文本	未提供
     * set_hidden_list	公园列表隐身 1否 2是	否	文本	未提供
     * set_hidden_distance	对他人隐藏我的距离 1否 2是	否	文本	未提供
     * set_info_money	解锁相册所需金额【非必填】
     */
    @POST("Member/systemSet")
    @FormUrlEncoded
    Call<JsonObject> getSystemSet(
            @Field("token") String token
            , @Field("set_info") String set_info
            , @Field("set_hidden_list") String set_hidden_list
            , @Field("set_hidden_distance") String set_hidden_distance
            , @Field("set_info_money") String set_info_money
            , @Field("type") String type
    );

    /**
     * 隐私设置
     * 参数名称	参数描述	是否为空	参数类型	示例值
     * token	用户 token	否	文本	未提供
     * member_id	用户id【被看的人的id】
     */
    @POST("Dynamic/dynamicListAndroid")
    @FormUrlEncoded
    Call<JsonObject> getDynamicList(
            @Field("token") String token
            , @Field("member_id") String member_id
    );

    /**
     * 关于我们
     */
    @GET("SystemSet/aboutUs")
    Call<JsonObject> getAboutUs();

    /**
     * 节目点赞
     */
    @POST("OrderGood/addOrderGood")
    @FormUrlEncoded
    Call<JsonObject> addOrderGood(@Field("token") String token
            , @Field("order_id") String order_id
    );

    /**
     * 我的约会
     */
    @POST("Order/myOrderList")
    @FormUrlEncoded
    Call<JsonObject> myOrderList(
            @Field("token") String token
            , @Field("page") int page
            , @Field("type") String type
    );

    /**
     * 申请成为区域代理
     * token	用户 token	否	文本	未提供
     * tel	联系电话	否	文本	未提供
     * name	用户姓名	否	文本	未提供
     * information	申请信息	否	文本	未提供
     * type	1查看 2申请
     */
    @POST("Agent/addAgent")
    @FormUrlEncoded
    Call<JsonObject> addAent(
            @Field("token") String token
            , @Field("tel") String tel
            , @Field("name") String name
            , @Field("information") String information
            , @Field("type") String type
    );


    @POST("Member/whoInviteMe")
    @FormUrlEncoded
    Call<JsonObject> getWhoInviteMe(
            @Field("token") String token
            , @Field("invite_code") String invite_code
    );

    /**
     * 换绑手机号验证吗
     */
    @POST("Member/bindPhone1")
    @FormUrlEncoded
    Call<JsonObject> bindPhone1(
            @Field("token") String token
            , @Field("account") String account
            , @Field("verify") String verify
    );

    /**
     * 换绑手机号
     */
    @POST("Member/bindPhone2")
    @FormUrlEncoded
    Call<JsonObject> bindPhone2(
            @Field("token") String token
            , @Field("account") String account
            , @Field("verify") String verify
    );

    /**
     * 我的收藏
     */
    @POST("Mylike/likeList")
    @FormUrlEncoded
    Call<JsonObject> likeList(
            @Field("token") String token
            , @Field("page") int page
            , @Field("lon") String lon
            , @Field("lat") String lat
    );

    /**
     * 发布动态
     * token	用户 token	否	文本	未提供
     * remarks	内容	否	文本	未提供
     * can_comment	能否评论 2否 1是	否	文本	未提供
     * img[]	图片文件
     */

    @Multipart
    @POST("Dynamic/addDynamic")
    Call<JsonObject> uploadFile(
            @Field("token") String token,
            @Field("remarks") String remarks,
            @Field("can_comment") String can_comment,
            @Part() MultipartBody.Part file1,
            @Part() MultipartBody.Part file2,
            @Part() MultipartBody.Part file3,
            @Part() MultipartBody.Part file4
    );

    @Multipart
    @POST("Index/uploadImgMore")
    Call<JsonObject> uploadFiles(@Part() List<MultipartBody.Part> parts);


    /**
     * 取消所有收藏
     * *
     */
    @POST("Mylike/cancelMylike")
    @FormUrlEncoded
    Call<JsonObject> cancelMyLike(
            @Field("token") String token
    );

    /**
     * 余额支付
     */
    @POST("Pay/balancePay")
    @FormUrlEncoded
    Call<JsonObject> balancePay(
            @Field("token") String token
            , @Field("member_id") String member_id
            , @Field("type") String type
            , @Field("money") String money
            , @Field("meal_id") String meal_id
    );

    /**
     * 节目添加评论
     */
    @POST("OrderComment/addOrderComment")
    @FormUrlEncoded
    Call<JsonObject> addOrComment(
            @Field("token") String token
            , @Field("order_id") String order_id
            , @Field("content") String content
    );

    /**
     * 电台详情
     */
    @POST("Order/orderInfo")
    @FormUrlEncoded
    Call<JsonObject> orderInfo(
            @Field("token") String token
            , @Field("order_id") String order_id
    );

    /**
     * 动态列表---安卓
     */
    @POST("Dynamic/dynamicInfo")
    @FormUrlEncoded
    Call<JsonObject> dynamicInfo(
            @Field("token") String token
            , @Field("order_id") String order_id
            , @Field("type") String type
    );

    /**
     * 我的约会
     */
    @POST("Dynamic/dynamicListAndroid")
    @FormUrlEncoded
    Call<JsonObject> dynamicListAndroid(
            @Field("token") String token
            , @Field("member_id") String member_id
    );

    /**
     * 评论列表
     * *
     */
    @POST("Comment/commentList")
    @FormUrlEncoded
    Call<JsonObject> commentList(
            @Field("token") String token
            , @Field("member_id") String member_id
    );


    /**
     * 添加评论
     * *
     */
    @POST("Comment/addComment")
    @FormUrlEncoded
    Call<JsonObject> addComment(
            @Field("token") String token
            , @Field("cover_member_id") String cover_member_id
            , @Field("labels") String labels
    );

    /**
     * 三方登录绑定手机号
     * *
     */
    @POST("Member/threeLoginBind")
    @FormUrlEncoded
    Call<JsonObject> threeLoginBind(
            @Field("bind_id") String bind_id
            , @Field("account") String account
            , @Field("verify") String verify
            , @Field("token") String token
    );

    /**
     * 微信支付接口
     */
    @POST("Pay/wxPay")
    @FormUrlEncoded
    Call<JsonObject> wxPay(
            @Field("token") String token
            , @Field("money") String money
            , @Field("type") String type
            , @Field("member_id") String member_id
            , @Field("meal_id") String meal_id
    );

    /**
     * 支付宝支付
     */
    @POST("Pay/aliPay")
    @FormUrlEncoded
    Call<JsonObject> aliPay(
            @Field("token") String token
            , @Field("money") String money
            , @Field("type") String type
            , @Field("member_id") String member_id
            , @Field("meal_id") String meal_id
    );

    /**
     * 删除动态
     */
    @POST("Dynamic/delDynamic")
    @FormUrlEncoded
    Call<JsonObject> delDynamic(
            @Field("token") String token
            , @Field("order_id") String order_id
    );

    /**
     * 节目报名
     */
    @Multipart
    @POST("Order/addEnlist")
    Call<JsonObject> addEnlist(
            @Field("token") String token
            , @Field("order_id") String order_id
            , @Part() MultipartBody.Part file1
    );

    /**
     * 领取红包
     */
    @POST("Index/drawAmount")
    @FormUrlEncoded
    Call<JsonObject> drawAmount(
            @Field("token") String token
    );

    /**
     * 领取红包
     */
    @POST("Index/isLing")
    @FormUrlEncoded
    Call<JsonObject> isLing(
            @Field("token") String token
    );

    /**
     * 领取红包
     */
    @POST("Authentication/center")
    @FormUrlEncoded
    Call<JsonObject> center(
            @Field("token") String token
    );

    /**
     * 观看阅后即焚的照片
     */
    @POST("Index/lookImage")
    @FormUrlEncoded
    Call<JsonObject> lookImage(
            @Field("token") String token
            , @Field("img_id") String img_id
            , @Field("cover_member_id") String cover_member_id
    );

    /**
     * token	用户 token	否	文本	未提供
     cover_member_id	被查看人的用户 id	否	文本	未提供
     type	1聊天 2查看社交账号 3解锁相册	否	文本	未提供
     do_type	1查看 2使用
     */
    @POST("Index/isPay")
    @FormUrlEncoded
    Call<JsonObject> isPay(
            @Field("token") String token
            , @Field("cover_member_id") String cover_member_id
            , @Field("type") String type
            , @Field("do_type") String do_type
    );

    /**
     * 查看用户验证码
     */
    @POST("Apply/lookInvication")
    @FormUrlEncoded
    Call<JsonObject> lookInvication(
            @Field("token") String token
    );

    /**
     * 提现
     */
    @POST("MemberWithdraw/addWithdraw")
    @FormUrlEncoded
    Call<JsonObject> addWithdraw(
            @Field("token") String token
            ,@Field("org_money") String org_money
            ,@Field("service_charge") String service_charge
    );   /**
     * 提现
     */
    @POST("MemberWithdraw/serviceCharge")
    @FormUrlEncoded
    Call<JsonObject> serviceCharge(
            @Field("org_money") String org_money
    );
}